﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/*
/// <summary>
/// 1.传值(by value)
变量的值被复制出一份,与原来的值将不相干,也就是说即使新的值被修改,原来的值也不会改变,在JavaScript中基本类型都是传值的.
复制代码
代码如下:

function testPassValue()
{
    var m = 1;
    var n = 2;
    //将m,n的值复制一份,传递到passValue
    passValue(m, n);
    alert(m);  //将是原有的值
}
function passValue(a, b)
{
    a = a + b; //改变a的值,这里a只是原有值的一份copy
    alert(a);
}

输出结果:
3

1 
2.传引用(by reference).
引用本身复制一份传给function,引用指向的对象并没有被复制传递(java中也是如此),在function中,如果改变了对象的属性的值,由于和原来的引用指向的是同一个对象,因此在通过原来的引用访问到的将是修改过的值;
但是如果只是在function中将引用指向一个新的对象,将不会改变原对象的值,改变的只是复制的这一份引用.
复制代码
代码如下:

function testPassValue()
{
    var date = new Date(2006, 02, 27);
    alert(date.getDate());  //输出为 27
                            //将date引用本身复制一份,传递到passReference,注意date所指向的对象并没有被复制
    passReference(date);
    alert(date.getDate());  //输出为12
                            //同上
    changeReference(date);
    alert(date.getDate());  //输出还为12
}
function passReference(da)
{
    //由于da和原引用指向的是同一个对象,在function外,通过原有的引用访问到的将是对象的日期属性值,将是修改之后的值.
    da.setDate(12);
}
function changeReference(da)
{
    //此时da引用实际上是原引用的一份copy,将引用本身重新赋值,将不会影响原引用
    da = new Date(2007, 05, 11);

    //将da引用指向一个新的对象,此时原引用指向的还是原来的对象
    alert(da.getDate());     // 输出为11
}
/// </summary>
public class refandout : MonoBehaviour {
    
}
*/